package com.study.studyelasticsearch.client;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import com.study.studyelasticsearch.util.es.curd.vo.DeleteDocVo;

import java.util.List;

/**
 * ES对文档的增删改接口
 */
public interface EsDoc {

    /**
     * 默认取doc的id属性作为文档id，如果doc没有id属性，则默认生成一个uuid作为文档的id。
     * @param indexName 要添加到的索引
     * @param doc 要添加到es的文档
     * @param <T> 实体
     */
    default <T> void saveOrUpdateDoc(String indexName, T doc) {
        indexName = EsIndex.handleIndexName(indexName);
        String docId = StrUtil.nullToDefault((CharSequence) BeanUtil.getFieldValue(doc, "id"), UUID.fastUUID().toString(true));
        this.saveOrUpdateDoc(indexName, doc, docId);
    }

    /**
     * 默认取doc的id属性作为文档id，如果doc没有id属性，则默认生成一个uuid作为文档的id。
     * @param indexName 要添加到的索引
     * @param doc 要添加到es的文档
     * @param docId 文档的id
     * @param <T> 实体
     */
    <T> void saveOrUpdateDoc(String indexName, T doc, String docId);

    List<DeleteDocVo> deleteDoc(String indexName, String... ids);

    boolean deleteAllDoc(String indexName);

    void updateByQuery();

    // updateByQuery
    //    POST */_update_by_query
//    {
//        "query": {
//        "bool": {
//            "must": [
//            {
//                "exists": {
//                "field": "notesets"
//            }
//            }
//      ]
//        }
//    },
//        "script": {
//        "source": "ctx._source['notesets']=[]"
//    }
//    }


}
